package org.codeart.ioc.factory;

import org.codeart.ioc.exception.BeanException;

public interface BeanFactory {

    Object getBean(String name) throws Exception;

    /**
     * 泛型方法,传入当前类或者其子类
     *
     * @param name  名称
     * @param clazz 字节码对象
     * @param <T>   泛型
     * @return T
     * @throws Exception 异常
     */
    <T> T getBean(String name, Class<? extends T> clazz) throws Exception;

    /**
     * 根据类型查找 Bean
     *
     * @param requiredType 类型
     * @return T
     * @throws BeanException 找到多个符合条件的 Bean 抛出异常
     */
    <T> T getBean(Class<?> requiredType) throws Exception;
}
